package cn.learn.validator.groupby;

import cn.learn.validator.groupsequence.EmployeeGroupSequenceProvider;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.group.GroupSequenceProvider;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.Pattern;

/**
 * @author huangyezhan
 * @version 1.0
 * @date 2020年08月13日20:21
 */
@Setter
@Getter
@ToString
@GroupSequenceProvider(EmployeeGroupSequenceProvider.class)
public class Employee {
    /**
     * 如果指定了验证组，那么该参数就只属于指定的验证分组
     *
     * 如果其他没有指定验证组的参数，那么就属于默认组的
     */
    /**
     * 分组校验标记，新增
     */
    public interface Add {
    }

    /**
     * 分组校验标记，更改
     */
    public interface Update {
    }

    /**
     * 举例：
     * 1、员工的 age 在 20-25之间，title必须以“初级”开头
     * 2、员工的 age 在 25-30之间，title必须以“中级”开头
     */
    public interface Junior {
    }

    public interface Middle {
    }


    /**
     * @apiNote @Null 在新增的时候生效
     * @apiNote @NotNull 在更改的时候生效
     */
    @Null(groups = {Add.class})
    @NotNull(groups = Update.class)
    private Long id;

    /**
     * 属于默认组
     * {@link javax.validation.groups.Default}
     * 当然也可以同时给它指定两个分组：@NotEmpty(groups = {Add.class,Update.class})
     */
    @NotEmpty
    @Length(min = 6, max = 16)
    private String username;


    private Integer age;

    @Pattern(regexp = "^\u521d\u7ea7.*", groups = Junior.class)  //初级
    @Pattern(regexp = "^\u4e2d\u7ea7.*", groups = Middle.class)  //中级
    private String title;

    //@Valid
    private Department department;


}
